Vectors in 3D graphics
A vector is a
mathematical geometric construct that consists of multidimensional
values that provide a magnitude and direction. That sounded a little
too much like a math class. You can think of vectors as a set of
floating point values used to represent a point or direction in space.
Use groups of vectors to represent the triangles that make up the
geometry in your game.
You have already used vectors in “Sprites and 2D Graphics.” The Vector2 type, which contains two float values for X and Y is used to express the position to draw the sprites. XNA Game Studio also provides Vector3 and Vector4 types, which contain three and four components each.
XNA Game Studio uses free
vectors. Free vectors are represented by a single set of components
equal to the number of dimensions of the vector. This single set of
components is able to express a direction and a magnitude. By contrast,
in mathematics, another type of vector exists called a bounded vector,
which is represented by two sets of components for both the start point
and the end point. Because they are not often used in computer
graphics, we focus on free vectors, which we call just “vectors.”
Vectors are in whatever unit
you want them to be in. The important rule is to be consistent
throughout your game and even your art pipeline. If one artist creates
buildings for your game and one unit equals a meter, and another artist
creates your game characters with one unit equaling one inch, the
buildings are going to look small or your characters are going to look
big. If you are working on a team, it is helpful to decide on what one
unit is equal to in your game.
If you are not able to
author or export your art content yourself, the content pipeline scales
your models for you given a scaling factor.
|
Vector4 the four dimensional vector
As we mentioned, XNA Game Studio supports three types of vectors: Vector2, Vector3, and Vector4. Vector2 has two dimensions, so use it in 2D graphics. Vector3 has three dimensions, and is used it in 3D graphics. What should Vector4 be used in?
A Vector4 like the Vector3 type contains the X, Y, and Z values. The fourth component, called the homogeneous component and represented by the W
property, is not used for space time manipulation unfortunately. The
fourth component is required when multiplying the vector by a matrix,
which has four rows of values. Matrices and vector multiplication are
discussed later in this chapter.
Point Versus Direction and Magnitude
When working with Vector3 and Vector4
values, they can represent a 3D point in space or a direction with a
magnitude. When you use a vector as the vertex position of a triangle,
it represents a point in space. When a vector is used to store the
velocity of an object, it represents a direction and a magnitude. The
magnitude of a vector is also commonly referred to as the length of the
vector and can be accessed using the Length property of all of the vector types.
It is often useful to have a
vector that represents a direction and magnitude to have a length of 1.
This type of vector is called a unit vector. Unit vectors have nice
mathematical properties in that they simplify many of the equations
used with vectors so that their operations can be faster, which is
important when creating real-time graphics in games. When you change a
vector, so its direction stays the same but the length of the vector is
set to one, it is called normalizing the vector. A Normalize method is provided for each of the vector types.
Vector Addition
When you add two vectors A
and B together, you obtain a third vector C, which contains the
addition of each of the vector components. Vector addition, like normal
algebraic addition, is commutative meaning that A + B is equal to B + A.
Geometrically vector addition
is described as moving the tail of the B vector, which is at the
origin, to the head of the A vector, which is the value the A vector
represents in space. The resulting vector C is the vector from the tail
of A, which is the origin, to the head of B.
In Figure 4.4,
vector A contains a value of { 2, 1 } and vector B contains a value of
{ 1, 3 }. The resulting vector C contains the value { 3, 4 }.
If any of the components
of the vector are negative, the values are added together in the same
way. The resulting value can have negative components.
Vector Subtraction
When you subtract two
vectors A and B from each other, you obtain a third vector C, which is
the difference of each of the vector components. Vector subtraction is
not commutative meaning that A – B is not equal to B – A.
Geometrically vector
subtraction is described as moving the head of vector B to the head of
the A vector. The resulting vector C is formed from the tail of A,
which is at the origin, to the tail of B.
In Figure 4.5,
vector A contains a value of { 3, 4 } and vector B contains a value of
{ 1, 3 }. The resulting vector C contains the value { 2, 1 }.